//package com.anlu.base.beetl;
//
//import com.alibaba.fastjson2.JSON;
//import com.anlu.base.beetl.mapper.UserMapper;
//import com.anlu.base.model.UserEntity;
//import com.zaxxer.hikari.HikariDataSource;
//import org.beetl.sql.core.*;
//import org.beetl.sql.core.db.MySqlStyle;
//import org.beetl.sql.ext.DebugInterceptor;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//
//import javax.sql.DataSource;
//import java.util.Date;
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//
///**
// * 官方文档：https://www.kancloud.cn/xiandafu/beetlsql3_guide/3033082
// */
//public class BeetlDemo {
//
//    private final static Logger logger = LoggerFactory.getLogger(BeetlDemo.class);
//
//    static String driver = "com.mysql.cj.jdbc.Driver";
//    static String  url = "jdbc:mysql://localhost:3306/world?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf8";
//    static String userName = "root";
//    static String password = "root";
//
//    public static void main(String[] args) throws Exception {
//
////        testInsert();
////        test1();
//
////        test2();
////        test3();
////        test4();
//
////        test5();
//
//        test6();
//    }
//
//
//    static void test1()throws Exception {
//
//        //根据主键进行查找
//        UserEntity user  = getSQLManager().unique(UserEntity.class,1);
//
//        logger.info(user.toString());
//    }
//
//    /**
//     * 测试insert
//     */
//    static void testInsert(){
//
//        SQLManager sqlManager = getSQLManager();
//
//        UserEntity user = new UserEntity();
//        user.setName("andrew1");
//        user.setDepartmentId(1);
//        user.setCreate_time(new Date());
//        Integer res = sqlManager.insert(user);
//        logger.info("res={}",res);
//
//    }
//
//    static void test2(){
//        SQLManager sqlManager = getSQLManager();
//
//        String sql = "select * from sys_user where id=?";
//        Integer id  = 1;
//        SQLReady sqlReady = new SQLReady(sql,new Object[]{id});
//        List<UserEntity> userEntities = sqlManager.execute(sqlReady,UserEntity.class);
//        logger.info("userEntities={}", JSON.toJSONString(userEntities));
//
//
//    }
//
//    static void test3(){
//        SQLManager sqlManager = getSQLManager();
//
//        String sql = "select * from sys_user where department_id=#{id} and name=#{name}";
//        UserEntity paras = new UserEntity();
//        paras.setDepartmentId(1);
//        paras.setName("andrew");
//        List<UserEntity> list = sqlManager.execute(sql,UserEntity.class,paras);
//        logger.info("userEntities={}", JSON.toJSONString(list));
//
//
//        //或者使用Map作为参数
//        String sql1 = "select * from sys_user where department_id=#{myDeptId} and name=#{myName}";
//        Map hashMap = new HashMap();
//        hashMap.put("myDeptId",1);
//        hashMap.put("myName","andrew");
//        List<UserEntity> list2 = sqlManager.execute(sql1,UserEntity.class,hashMap);
//        logger.info("使用map userEntities={}", JSON.toJSONString(list));
//
//    }
//
//    static void test4(){
//        SQLManager sqlManager = getSQLManager();
//
//        //使用Beetl模板语句
//        String sql = "select * from sys_user where 1=1 \n" +
//                "-- @if(isNotEmpty(myDeptId)){\n" +
//                "   and department_id=#{myDeptId}\n" +
//                "-- @}\n" +
//                "and name=#{myName}";
//
//
//        Map paras = new HashMap();
//        paras.put("myDeptId",1);
//        paras.put("myName","andrew");
//        List<UserEntity> list = sqlManager.execute(sql,UserEntity.class,paras);
//
//        logger.info("使用Beetl模板语句 userEntities={}", JSON.toJSONString(list));
//
//    }
//
//    /**
//     * 从模板读取sql文件
//     */
//    static void test5(){
//        SQLManager sqlManager = getSQLManager();
//
//        SqlId id = SqlId.of("user","select");
//        Map map = new HashMap();
//        map.put("name","andrew");
//        List<UserEntity> list = sqlManager.select(id,UserEntity.class,map);
//
//        logger.info("读取本地工程sql文件 userEntities={}", JSON.toJSONString(list));
//
//    }
//
//    static void test6(){
//        SQLManager sqlManager = getSQLManager();
//
//        //得到UserMapper接口的一个代理实现类，如果使用spring框架，则可以自动注入mapper
//        UserMapper mapper = sqlManager.getMapper(UserMapper.class);
//        List<UserEntity> list = mapper.all();
//        boolean isExist = mapper.exist(2);
//        UserEntity me = mapper.unique(1);
//        me.setName("newName");
//        mapper.updateById(me);
//    }
//
//
//    private  static SQLManager getSQLManager(){
//        //得到一个数据源
//        DataSource dataSource = datasource();
//        //得到一个ConnectionSource， 单数据源
//        ConnectionSource source =  ConnectionSourceHelper.getSingle(dataSource);
//        //SQLManagerBuilder 唯一必须的参数就是ConnectionSource
//        SQLManagerBuilder builder = new SQLManagerBuilder((org.beetl.sql.core.ConnectionSource) source);
//        //命名转化，数据库表和列名下划线风格，转化成Java对应的首字母大写，比如create_time 对应ceateTime
//        builder.setNc(new UnderlinedNameConversion());
//        //拦截器，非必须，这里设置一个debug拦截器，可以详细查看执行后的sql和sql参数
//        builder.setInters(new Interceptor[]{new DebugInterceptor()});
//        //数据库风格，因为用的是H2,所以使用H2Style,
//        builder.setDbStyle(new MySqlStyle());
//        SQLManager sqlManager = builder.build();
//        return sqlManager;
//    }
//
//    private static DataSource datasource() {
//        HikariDataSource ds = new HikariDataSource();
//        //内存数据库
//        ds.setJdbcUrl(url);
//        ds.setUsername(userName);
//        ds.setPassword(password);
//        ds.setDriverClassName(driver);
//        return ds;
//    }
//}
